<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // for (var i = 0; i < 5; i++) {
        //     setTimeout(function () {
        //         console.log(i);
        //     }, 1000)
        // }
        // for(var i = 0; i <script 5; i++) {
        //     (function(i) {
        //         setTimeout(function () {
        //             console.log(i);
        //         },1000)
        //     })(i)
        // }
        // 函数柯里化、
        // function fn1 (province) {
        //     return function (city) {
        //         return function (area) {
        //             console.log(`${province}省${city}市${area}区`);
        //         }
        //     }
        // }
        // const fn2 = fn1('浙江')('杭州')
        // fn2('西湖')
        // fn2('萧山')

        // new的过程
        // function Father (name, age) {
        //     this.name = name
        //     this.age = age
        //     return { name, age }
        // }
        // Father.prototype.say = function () {
        //     console.log('学习');
        // }
        // var fn = new Father('zs', 20)
        // console.log(fn.name);
        // console.log(fn.age);
        // fn.prototype.say()

        // 内置数组原型添加方法
        // const arr = [3, 4, 5]
        // const arr1 = [4, 5, 6]
        // Array.prototype.sum = function () {
        //     return this.reduce((sum, item) => sum + item, 0)
        // }
        // console.log(arr.sum());
        // console.log(arr1.sum());
        // 改变this指向
        // var a = 100
        // function fn () {
        //     console.log(this.a);
        // }
        // var obj = {
        //     a: 200
        // }
        // fn.call(obj) //200
        // fn.apply(obj) //200
        // var fn1 = fn.bind(obj)
        // fn1()//200

        // var a = 100
        // function fn (m, n) {
        //     console.log(this.a + m + n);
        // }
        // var obj = {
        //     a: 200
        // }
        // fn.call(obj,2,3)
        // fn.apply(obj,[2,3])

        // 原型继承
        // function Father (name, age) {
        //     this.name = name
        //     this.age = age
        // }
        // Father.prototype.say = function () {
        //     console.log('学习')
        // }
        // function Son (name, age, Subject) {
        //     this.name = name
        //     this.age = age
        //     this.Subject = Subject
        // }
        // Son.prototype = new Father()
        // Son.prototype.constructor = Son
        // var zs = new Son('ls', 20, '数学')
        // zs.say()

        class Father {
            constructor(name, age) {
                this.name = name
                this.age = age
            }
            say () {
                console.log('说话');
            }
        }

        class Student extends Father {
            constructor(name, age, subject) {
                super(name, age)
                this.subject = subject
            }
        }

        var zs = new Student('ls', 20, '数学')
        zs.say()
    </script>
</body>

</html>